package br.com.iswe.gwt.util.client;

import java.util.ArrayList;
import java.util.List;

public class ClientInfoContext {

	private static ClientInfoContext clientInfoContext;
	
	private static List onChangeSessionInfoList = new ArrayList();
	
	private SessionInfo sessionInfo;
	
	private ClientInfoContext(SessionInfo sessionInfo) {
		this.sessionInfo = sessionInfo;
	}

	public static void setClientInfoContext(SessionInfo sessionInfo){
		clientInfoContext = new ClientInfoContext(sessionInfo);
		//notifica todos os listeners que mudaram os dados de sessao do cliente
		fireOnChangeSessionInfo(sessionInfo);
	}
	
	public static void clearClientInfoContext(){
		if(clientInfoContext != null){
			clientInfoContext.sessionInfo = null;//Limpa a SessionInfo
		}
		
		clientInfoContext = new ClientInfoContext(null);
		//notifica todos os listeners que mudaram os dados de sessao do cliente
		fireOnChangeSessionInfo(new SessionInfo());
	}
	
	private static void fireOnChangeSessionInfo(SessionInfo sessionInfo) {
		//varre a lista de eventos onChangeSessionInfoList e dispara
		for (int i = 0; i < onChangeSessionInfoList.size(); i++) {
			Listener listener = (Listener)onChangeSessionInfoList.get(i);
			listener.execute(sessionInfo);
		}
	}

	public static ClientInfoContext getClientInfoContext(){
		if( clientInfoContext == null ){
			clientInfoContext = new ClientInfoContext(new RequestInfo());
		}
		return clientInfoContext;
	}

	public static void addOnChangeSessionInfo(Listener listener){
		onChangeSessionInfoList.add(listener);
	}
	
	public SessionInfo getSessionInfo() {
		return sessionInfo;
	}
	public void setSessionInfo(SessionInfo sessionInfo) {
		this.sessionInfo = sessionInfo;
	}
}
